package com.mpsc.singleton.demo.util;

import com.spire.doc.Document;
import com.spire.doc.ProtectionType;
import com.spire.doc.Section;
import com.spire.doc.Table;
import com.spire.doc.documents.*;
import com.spire.doc.fields.DocPicture;
import com.spire.doc.fields.TextRange;
import com.spire.doc.interfaces.ITable;
import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;

import java.util.Date;

public class SpireUtil {

    public static void main(String[] args) {
        pdfToDocx(
                "D:\\Program Files\\Desktop\\继续教育学院关于学生办理缓考的说明.pdf",
                "D:\\Program Files\\Desktop\\继续教育学院关于学生办理缓考的说明.docx");
    }

    /***
     * docx转化为html，并以相同的文件名写会到对应路径下，返回html文件路径
     * @param docxPath docx 文件全路径
     *                 （D:\test\test.docx）
     * @return
     */
    public static String DocxToHtml(String docxPath) {
        String htmlPath = docxPath.substring(0, docxPath.lastIndexOf(".")) + ".html";
        //实例化Document类的对象
        Document doc = new Document();
        //加载Word文档
        doc.loadFromFile(docxPath);
        //保存为HTML格式
        doc.saveToFile(htmlPath, com.spire.doc.FileFormat.Html);
        doc.dispose();
        return htmlPath;
    }


    public static String pdfToDocx(String pdfPath, String docxPath) {
        PdfDocument pdf = new PdfDocument();
        String docPath = "";
        pdf.loadFromFile(pdfPath);
        //保存为Word格式
        pdf.saveToFile(docxPath, FileFormat.DOCX);
        return docPath;
    }


    // Java将Word文档按节拆分成若干文档
    void test() {
        //创建Document对象
        Document document = new Document();

        //加载要拆分的文档
        document.loadFromFile("C:\\Users\\Administrator\\Desktop\\sections.docx");

        //声明新的Document对象
        Document newWord;

        //遍历源文档中的节
        for (int i = 0; i < document.getSections().getCount(); i++) {
            //初始化新的Document对象
            newWord = new Document();

            //将源文档中的指定节复制到新文档
            newWord.getSections().add(document.getSections().get(i).deepClone());

            //保存新文档到指定文件夹
            newWord.saveToFile(String.format("C:\\Users\\Administrator\\Desktop\\Output\\result-%d.docx", i));
        }
    }

    //在 Word 中创建可填充表单
    void test1() {
        //创建文档对象
        Document doc = new Document();

        //添加一个节
        Section section = doc.addSection();

        //添加一个表格
        Table table = section.addTable(true);
        table.resetCells(7, 2);

        //将文本添加到第一列的单元格
        Paragraph paragraph = table.getRows().get(0).getCells().get(0).addParagraph();
        paragraph.appendText("纯文本内容控件");
        paragraph = table.getRows().get(1).getCells().get(0).addParagraph();
        paragraph.appendText("富文本内容控件");
        paragraph = table.getRows().get(2).getCells().get(0).addParagraph();
        paragraph.appendText("图片内容控件");
        paragraph = table.getRows().get(3).getCells().get(0).addParagraph();
        paragraph.appendText("下拉列表内容控件");
        paragraph = table.getRows().get(4).getCells().get(0).addParagraph();
        paragraph.appendText("复选框内容控件");
        paragraph = table.getRows().get(5).getCells().get(0).addParagraph();
        paragraph.appendText("组合框内容控件");
        paragraph = table.getRows().get(6).getCells().get(0).addParagraph();
        paragraph.appendText("日期选择器内容控件");

        //向单元格添加纯文本内容控件 (0,1)
        paragraph = table.getRows().get(0).getCells().get(1).addParagraph();
        StructureDocumentTagInline sdt = new StructureDocumentTagInline(doc);
        paragraph.getChildObjects().add(sdt);
        sdt.getSDTProperties().setSDTType(SdtType.Text);
        sdt.getSDTProperties().setAlias("纯文本");
        sdt.getSDTProperties().setTag("纯文本");
        sdt.getSDTProperties().isShowingPlaceHolder(true);
        SdtText text = new SdtText(true);
        text.isMultiline(false);
        sdt.getSDTProperties().setControlProperties(text);
        TextRange tr = new TextRange(doc);
        tr.setText("单击或点击此处输入文本。");
        sdt.getSDTContent().getChildObjects().add(tr);

        //向单元格添加富文本内容控件 (1,1)
        paragraph = table.getRows().get(1).getCells().get(1).addParagraph();
        sdt = new StructureDocumentTagInline(doc);
        paragraph.getChildObjects().add(sdt);
        sdt.getSDTProperties().setSDTType(SdtType.Rich_Text);
        sdt.getSDTProperties().setAlias("富文本");
        sdt.getSDTProperties().setTag("富文本");
        sdt.getSDTProperties().isShowingPlaceHolder(true);
        text = new SdtText(true);
        text.isMultiline(false);
        sdt.getSDTProperties().setControlProperties(text);
        tr = new TextRange(doc);
        tr.setText("单击或点击此处输入文本。");
        sdt.getSDTContent().getChildObjects().add(tr);

        //Add a picture content control to the cell (2,1)
        paragraph = table.getRows().get(2).getCells().get(1).addParagraph();
        sdt = new StructureDocumentTagInline(doc);
        paragraph.getChildObjects().add(sdt);
        sdt.getSDTProperties().setSDTType(SdtType.Picture);
        sdt.getSDTProperties().setAlias("图片");
        sdt.getSDTProperties().setTag("图片");
        SdtPicture sdtPicture = new SdtPicture();
        sdt.getSDTProperties().setControlProperties(sdtPicture);
        DocPicture pic = new DocPicture(doc);
        pic.loadImage("C:\\Users\\Administrator\\Desktop\\图片.png");
        sdt.getSDTContent().getChildObjects().add(pic);

        //向单元格添加下拉列表内容控件(3,1)
        paragraph = table.getRows().get(3).getCells().get(1).addParagraph();
        sdt = new StructureDocumentTagInline(doc);
        sdt.getSDTProperties().setSDTType(SdtType.Drop_Down_List);
        sdt.getSDTProperties().setAlias("下拉列表");
        sdt.getSDTProperties().setTag("下拉列表");
        paragraph.getChildObjects().add(sdt);
        SdtDropDownList sddl = new SdtDropDownList();
        sddl.getListItems().add(new SdtListItem("选择一个项目。", "1"));
        sddl.getListItems().add(new SdtListItem("项目2", "2"));
        sddl.getListItems().add(new SdtListItem("项目3", "3"));
        sddl.getListItems().add(new SdtListItem("项目4", "4"));
        sdt.getSDTProperties().setControlProperties(sddl);
        tr = new TextRange(doc);
        tr.setText(sddl.getListItems().get(0).getDisplayText());
        sdt.getSDTContent().getChildObjects().add(tr);

        //向单元格添加两个复选框内容控件 (4,1)
        paragraph = table.getRows().get(4).getCells().get(1).addParagraph();
        sdt = new StructureDocumentTagInline(doc);
        paragraph.getChildObjects().add(sdt);
        sdt.getSDTProperties().setSDTType(SdtType.Check_Box);
        SdtCheckBox scb = new SdtCheckBox();
        sdt.getSDTProperties().setControlProperties(scb);
        tr = new TextRange(doc);
        sdt.getChildObjects().add(tr);
        scb.setChecked(false);
        paragraph.appendText(" 选项 1");

        paragraph = table.getRows().get(4).getCells().get(1).addParagraph();
        sdt = new StructureDocumentTagInline(doc);
        paragraph.getChildObjects().add(sdt);
        sdt.getSDTProperties().setSDTType(SdtType.Check_Box);
        scb = new SdtCheckBox();
        sdt.getSDTProperties().setControlProperties(scb);
        tr = new TextRange(doc);
        sdt.getChildObjects().add(tr);
        scb.setChecked(false);
        paragraph.appendText(" 选项 2");

        //将组合框内容控件添加到单元格 (5,1)
        paragraph = table.getRows().get(5).getCells().get(1).addParagraph();
        sdt = new StructureDocumentTagInline(doc);
        paragraph.getChildObjects().add(sdt);
        sdt.getSDTProperties().setSDTType(SdtType.Combo_Box);
        sdt.getSDTProperties().setAlias("组合框");
        sdt.getSDTProperties().setTag("组合框");
        SdtComboBox cb = new SdtComboBox();
        cb.getListItems().add(new SdtListItem("选择一个项目."));
        cb.getListItems().add(new SdtListItem("项目 2"));
        cb.getListItems().add(new SdtListItem("项目 3"));
        sdt.getSDTProperties().setControlProperties(cb);
        tr = new TextRange(doc);
        tr.setText(cb.getListItems().get(0).getDisplayText());
        sdt.getSDTContent().getChildObjects().add(tr);

        //将日期选择器内容控件添加到单元格(6,1)
        paragraph = table.getRows().get(6).getCells().get(1).addParagraph();
        sdt = new StructureDocumentTagInline(doc);
        paragraph.getChildObjects().add(sdt);
        sdt.getSDTProperties().setSDTType(SdtType.Date_Picker);
        sdt.getSDTProperties().setAlias("日期选择器");
        sdt.getSDTProperties().setTag("日期选择器");
        SdtDate date = new SdtDate();
        date.setCalendarType(CalendarType.Default);
        date.setDateFormat("yyyy.MM.dd");
        date.setFullDate(new Date());
        sdt.getSDTProperties().setControlProperties(date);
        tr = new TextRange(doc);
        tr.setText("单击或轻按以输入日期。");
        sdt.getSDTContent().getChildObjects().add(tr);

        //仅允许用户编辑表单域
        doc.protect(ProtectionType.Allow_Only_Form_Fields, "permission-psd");

        //Save to file
        //doc.saveToFile("WordForm.docx", FileFormat.Docx_2013);
    }

    //获取表格，删除表格
    void test2(){
        //创建实例
        Document doc = new Document();

        //加载Word文档
        doc.loadFromFile("test.docx");

        //获取Section
        Section section = doc.getSections().get(0);

        //获取表格
        ITable table = section.getTables().get(0);

        //删除表格
        section.getTables().remove(table);

        //保存文档
        //doc.saveToFile("RemoveTable.docx",FileFormat.Docx_2013);
        doc.dispose();
    }

}
